local ClientOHOH = _G.ClientOHOH;

local M = ClientOHOH.class.new(script, ClientOHOH.files.OHOHOLYBUIBase());
local BtnHelper = ClientOHOH.load.BtnHelper();

local CallBackManager = ClientOHOH.load.CallBackManager();

function InitInsts(ui)
	ui.insts = {};

	ui.insts.close ="ctrl.btn.colse"
    ui.insts.cellPerfab ="ctrl.cell"
    ui.insts.list ="ctrl.listFrame"
    
    ui.insts.normal={ --常规展示信息状态
        root="ctrl.btn.normal.root",
        equipBest ="ctrl.btn.normal.best",
        delete ="ctrl.btn.normal.delete",
        equip="ctrl.content.btn_equip", --装备按钮
    }
        

    ui.insts.delete={ --删除状态
        root="ctrl.btn.delete.root",
        cancel ="ctrl.btn.delete.cancel",
        delete ="ctrl.btn.delete.delete",
        num="ctrl.btn.delete.num",
    }


    ui.insts.merge={ --合成状态
        ShowBtn= "ctrl.content.btn_make",--显示合成
        cancel="ctrl.fuse.merg.cancel",-- 取消合成
        mergebtn="ctrl.fuse.merg.btn",--合成成功
      }

    
    ui.insts.BgColor={
        [1]="ctrl.color.Common",
        [2] ="ctrl.color.Epic",
        [3] ="ctrl.color.Legendary",
        [4]="ctrl.color.Omega",
        [5]="ctrl.color.Mythic",
        [6]="ctrl.color.Rare",
    }

    -- ui.insts.SelectInfo="ctrl.content.contentFrame"
    -- ui.insts.MergeInfo="ctrl.fuse.fuseFrame"

    -- ui.insts.SelectInfo={
    --     root="ctrl.content.contentFrame",--更节点
    --     icon ="ctrl.content.icon",--武器图片
    --     titleBg ="ctrl.content.color_title",--称号背景色控制
    --     title ="ctrl.content.title",--称号
    --     name="ctrl.content.name",--名字
    --     value="ctrl.content.value",--攻击力
    --     bg="ctrl.content.bg",-- 称号背景色
    --     equip="ctrl.content.btn_equip", --装备按钮
    --     merge="ctrl.content.btn_make",--合成按钮
    -- }

    -- ui.insts.MergeInfo={
    --     root="ctrl.fuse.fuseFrame",--更节点
    --     icon ="ctrl.fuse.icon",--武器图片
    --     titleBg ="ctrl.content.color_title",--称号背景色控制
    --     title ="ctrl.fuse.title",--称号
    --     name="ctrl.fuse.name",--名字
    --     value="ctrl.fuse.value",--攻击力
    --     bg="ctrl.fuse.bg",-- 称号背景色
    --     list={
    --         [1]="ctrl.fuse.Item3.1",
    --         [2]="ctrl.fuse.Item3.2",
    --         [3]="ctrl.fuse.Item3.3",
    --     },
    --     merg={
    --         icon="ctrl.fuse.merg.icon",-- 消耗图标
    --         btn="ctrl.fuse.merg.btn",--按钮
    --         price="ctrl.fuse.merg.price",--价格
    --     }
    -- }
end

-- local gCellInsts={
--     active="ctrl.active",
--     btn="ctrl.btn",
--     bg="ctrl.bg",
--     deleteIcon="ctrl.deleteIcon",
--     equipIcon="ctrl.equipIcon",
--     icon="ctrl.icon",
--     level="ctrl.level",
--     name="ctrl.name",
-- }


function M.new(...)
	return M(...);
end;

function M.getBgColorByTitleId(self,id)
    return self.insts.BgColor[id]
end

function M.ctor(self)
	InitInsts(self)

    self.EquipBestEvent=_G.CommonOHOH.load.Connect().new()
    self.RemoveEvent=_G.CommonOHOH.load.Connect().new()
    self.MergeEvent=_G.CommonOHOH.load.Connect().new()
    self.EquipEvent=_G.CommonOHOH.load.Connect().new()



	M.super.ctor(self, ClientOHOH:GetPath_Loop("ReplicatedStorage.Resource.UI.WeaponStoreGui"));
    --列表对象
    self.ListUi=require(script.list).new(self.insts.list,self.insts.cellPerfab,self)
    --右侧显示信息对象
    self.InfoUi=require(script.Info).new(self) 

    self.insts.cellPerfab.Visible=false

    --关闭
    CallBackManager:AddRbxConnect(self,self.insts.close.Activated, function()
		self:Hide()
	end);


-----------------------------------操作接口----------------------------------------------
    self.insts.normal.equipBest.Visible=false
    self.insts.normal.delete.Visible=false
	--装备最佳
    CallBackManager:AddRbxConnect(self,self.insts.normal.equipBest.Activated, function()
        self.EquipBestEvent:Action()
	end);

    --触发删除
    CallBackManager:AddRbxConnect(self,self.insts.delete.delete.Activated, function()
         local data=self.ListUi:PullAllRemove()
         if data then
             self.RemoveEvent:Action(data)
         end

	end);

    --合成状态--->正常状态（合成成功）
    CallBackManager:AddRbxConnect(self,self.insts.merge.mergebtn.Activated, function()
        local data=self.InfoUi:GetMergeData()
        if data then
            local list= self.MergeEvent:Action(data)
            for k,v in pairs(list) do
                if v then
                    self:Merge2Normal()
                    self:EnterNormal()

                    local cell=self.ListUi:FindCellByCidAndLevel(data[1].cfgId,data[1].level+1)
                    self.InfoUi:Close()
                    self.InfoUi:Show(cell)

                end
            end
        end
    end);

    
    --装备某一把武器
    CallBackManager:AddRbxConnect(self,self.insts.normal.equip.Activated, function()

        local cell=self.InfoUi:GetSelectCell()
        if cell then
            self.EquipEvent:Action(cell:GetData())
        end

    end);



    -------------------------状态切换触发-------------------------------------

    --正常状态--->删除状态
    CallBackManager:AddRbxConnect(self,self.insts.normal.delete.Activated, function()
           self:EnterDelete()
           self.ListUi:Big()
    end);

    --删除状态--->正常状态
    CallBackManager:AddRbxConnect(self,self.insts.delete.cancel.Activated, function()
        self.ListUi:ClearRemove()
        self:EnterNormal()
     
    end);

    --正常状态--->合成状态
    CallBackManager:AddRbxConnect(self,self.insts.merge.ShowBtn.Activated, function()
        self:EnterMerge()
    end);


    --合成状态--->正常状态（合成取消）
    CallBackManager:AddRbxConnect(self,self.insts.merge.cancel.Activated, function()

        self:Merge2Normal()

        self:EnterNormal()
    end);
    

  
end;



function M.dtor(self)
	M.super.dtor(self);
end;


--更新武器数据
function M.UpdateData(self,data)
    for k,v in pairs(data) do
        if  not self.ListUi:IshadData(v) then
            local ui=self.insts.cellPerfab:Clone()
            ui.Parent=self.insts.cellPerfab.Parent
            ui.Visible=true
            self.ListUi:AddCell(ui,v)
        end
    end
end

--筛选列表，cell为空，表示不筛选
function M.FilterByCell(self,cell)
    self.ListUi:FilterByCell(cell)
end

--进入正常显示信息状态
function M.EnterNormal(self)
    self.state=1 -- 常规状态

    self:SetMergeShow(false)
    self:SetDeleteShow(false)
    self:SetNormalShow(true)

    -- self.insts.normal.root.Visible=true
    -- self.insts.delete.root.Visible=false
    -- self.ListUi:Big() --列表变大

    -- self.ListUi:ClearRemoveTag() 

end


--进入删除状态
function M.EnterDelete(self)
    self.state=0 --删除状态
    -- self.insts.normal.root.Visible=false
    -- self.insts.delete.root.Visible=true

    self:SetMergeShow(false)
    self:SetDeleteShow(true)
    self:SetNormalShow(false)

    self.InfoUi:Close() --关闭信息显示
end

--进入合成状态
function M.EnterMerge(self)
    self.state=2 --合成状态

    self:SetMergeShow(true)
    self:SetDeleteShow(false)
    self:SetNormalShow(false)

    local cell=self.InfoUi:GetSelectCell()
    self:FilterByCell(cell)
    self.InfoUi:AddMergeCell(cell)
end

--合成到正常 过渡处理
function M.Merge2Normal(self)
    self:FilterByCell()
    self.InfoUi:ClearMerge()



end



function M.SetMergeShow(self,isShow)
    self.InfoUi:SetMergeUiShow(isShow)
    self.insts.merge.cancel.Visible=isShow
end

function M.SetDeleteShow(self,isShow)
    self.insts.delete.root.Visible=isShow

end

function M.SetNormalShow(self,isShow)
    self.insts.normal.root.Visible=isShow
    self.InfoUi:SetNormalUiShow(isShow)

end

-- ui.insts.normal={ --常规展示信息状态
-- root="ctrl.btn.normal.root",
-- equipBest ="ctrl.btn.normal.best",
-- delete ="ctrl.btn.normal.delete",
-- equip="ctrl.content.btn_equip", --装备按钮
-- }


-- ui.insts.delete={ --删除状态
-- root="ctrl.btn.delete.root",
-- cancel ="ctrl.btn.delete.cancel",
-- delete ="ctrl.btn.delete.delete",
-- num="ctrl.btn.delete.num",
-- }


-- ui.insts.merge={ --合成状态
-- ShowBtn= "ctrl.content.btn_make",--显示合成
-- cancel="ctrl.fuse.merg.cancel",-- 取消合成
-- mergebtn="ctrl.fuse.merg.btn",--合成成功
-- }



--单元被点击
function M.CellClick(self,cell)

    if self.state==1 then -- 常规状态：展示武器信息
        if cell:IsSelete() then
            self.InfoUi:Close() --关闭信息显示
            self.ListUi:Big() --列表变大
        else
            self.InfoUi:Show(cell)-- 显示cell信息
            self.ListUi:Small() --列表变小
        end
    elseif self.state==2 then --合成状态：添加到合成槽位

        if self.InfoUi:MergeIsHad(cell) then --已经存在它
            self.InfoUi:RemoveMergeCell(cell) --移除合成表
        else
            self.InfoUi:AddMergeCell(cell)--添加合成表
        end
        
    elseif self.state==0 then--删除状态:打上删除标记
        self.ListUi:AddRemove(cell)
    end

end

function M.OnShow(self)
    self:Merge2Normal()
    self:EnterNormal()
    self.ListUi:Big() --列表变大
end
return M